package xx.services.page.rest;

import java.sql.SQLException;

import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Context;

import xx.entity.page.PageParam;
import xx.services.Passport;
import xx.services.page.inter.IParamInterface;
import xx.services.util.Constants;
import xx.util.string.Format;

/**
 * 列表对应的参数服务接口
 * 
 * @Path (Constants.RESTFUL_ROOT_PATH + "/page/param")
 * @author dengjinye,2010-12-22 $LastChangedDate$ $Author$
 */
@Path(Constants.RESTFUL_ROOT_PATH + "/page/param")
public class ParamRest extends Passport implements IParamInterface
{

    public ParamRest(@Context
    HttpServletRequest request)
    {
        super(request);
        // TODO Auto-generated constructor stub
    }

    /**
     * 获取一个列表参数详细信息。 <br>
     * 
     * @GET
     * @param paramId
     * @return 参数实体JSON数据
     * @author chenxiang
     */
    @GET
    @Path("/{param_id}")
    public String get(@PathParam("param_id")
    long paramId)
    {
        try
        {
            PageParam pp = new PageParam(qr, owner);
            pp.setParamId(paramId).load();
            return ok(pp);
        }
        catch (SQLException e)
        {
            return error(e);
        }
    }

    /**
     * 修改一个列表参数demo。<br>
     * 
     * @PUT
     * @param paramId-@PathParam("param_id")
     *            参数ID
     * @param pagesize-@FormParam("pagesize")
     *            每页显示多少记录
     * @param pageno-@FormParam("pageno")
     *            从第几页开始取数据，取值范围：1-n
     * @param cond-@FormParam("cond")
     *            取值条件where标准条件表达式
     * @param orderfield-@FormParam("orderfield")
     *            排序字段，也就是SQL语句中order by {orderfield}
     * @param fields-@FormParam("fields")
     *            需要返回的字段集，默认返回所有
     * @param dateFormat-@FormParam("date_format")
     *            日期格式化字符串
     * @param dateFormat-@FormParam("float_format")
     *            数字格式化字符串
     * @return 新列表参数实体JSON数据
     * @author chenxiang
     */
    @PUT
    @Path("/{param_id}")
    public String update(@PathParam("param_id")
    long paramId, @FormParam("pagesize")
    int pagesize, @FormParam("pageno")
    int pageno, @FormParam("cond")
    String cond, @FormParam("orderfield")
    String orderfield, @FormParam("fields")
    String fields, @FormParam("date_format")
    String dateFormat, @FormParam("float_format")
    String floatFormat)
    {
        try
        {
            PageParam pp = new PageParam(qr, owner);
            pp.setParamId(paramId);

            StringBuilder updateColumn = new StringBuilder();

            if (pagesize > 0)
            {
                pp.setPagesize(pagesize);
                updateColumn.append(",").append(PageParam.PAGESIZE);
            }

            if (pageno > 0)
            {
                pp.setPageno(pageno);
                updateColumn.append(",").append(PageParam.PAGENO);
            }

            if (!Format.isEmpty(cond))
            {
                pp.setCond(cond);
                updateColumn.append(",").append(PageParam.COND);
            }

            if (!Format.isEmpty(orderfield))
            {
                pp.setOrderfield(orderfield);
                updateColumn.append(",").append(PageParam.ORDERFIELD);
            }

            if (!Format.isEmpty(fields))
            {
                pp.setFields(fields);
                updateColumn.append(",").append(PageParam.FIELDS);
            }
            if (!Format.isEmpty(dateFormat))
            {
                pp.setDateFormat(dateFormat);
                updateColumn.append(",").append(PageParam.DATE_FORMAT);
            }
            if (!Format.isEmpty(floatFormat))
            {
                pp.setFloatFormat(floatFormat);
                updateColumn.append(",").append(PageParam.FLOAT_FORMAT);
            }

            if (updateColumn.length() > 0)
            {
                pp.update(updateColumn.toString());
            }
            return ok(pp);
        }
        catch (SQLException e)
        {
            return error(e);
        }
    }

}
